package cn.itsource.domain.org;

import cn.hutool.core.lang.RegexPool;

import cn.itsource.basic.domain.BaseDomain;
import cn.itsource.basic.domain.CreatePassword;
import cn.itsource.basic.domain.UserInfo;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;


import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.beans.Transient;
import java.util.Objects;

@Data
@AllArgsConstructor
@NoArgsConstructor
//@table 就是将表名与实体类名称做关系映射
@TableName("t_employee")
public class Employee extends UserInfo implements BaseDomain, CreatePassword {
//    alt + 鼠标左键
    //这个@id 是为了标识该字段对应数据库的主键id
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @NotBlank(message = "用户名不能为空")
    private String username;
    @Email(message = "请输入正确的邮箱")
    private String email;
    //这个就是正则
    @Pattern(regexp = RegexPool.MOBILE,message = "请输入正确的手机哈")
    @NotBlank(message = "手机号不能为空")
    private String phone;
    private String password;
//    @Min(value = 0,message = "最小年纪不能小于0岁")
//    @Max(value = 200,message = "最小年纪不能小于0岁")
    private Integer age;
    private Integer state;
    private Long departmentId;
    private Long shopId;
    private Boolean shopAdmin;
    private Boolean del;
    private String salt;

    //忽略该字段与数据的映射
    @TableField(exist = false)
    private Department dept;

    public void init() {
        //1.设置盐值
        this.createSalt();
        //2.设置md5加密的密码
        this.passwordMD5();
    }



//    public static void main(String[] args) {
//        //jdk自带提供的创建线程池的方法有7种
////        Executors.newCachedThreadPool();
////        //推荐使用这个 来创建线程池
////        new ThreadPoolExecutor();
//        //这个是线程安全的 vector
//        Vector vector = new Vector();
//        //特性: 有序 有下标 数组结构 查询快 增删慢
//        ArrayList<Object> objects = new ArrayList<>();
//        //特性:链表结构 查询慢,增删快
//        LinkedList<Object> objects1 = new LinkedList<>();
//        //
//        TreeSet<Object> objects2 = new TreeSet<>();
//        HashSet<Object> objects3 = new HashSet<>();
//        HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
//        new ConcurrentHashMap<>();
//        //jdk 1.7 string 类型存放的位置叫常量池
//        //jdk1.8 位置叫元空间
//        String a = "abc";
//        String b = "cba";
//        //封装类的特性: 自动拆装箱
//        //jdk1.5之前的特性:缓存:-128 ~127
//        //jdk1.5之后:最小值还是-128 最大值是可以通过jvm设置的,默认值还是127
//        Integer integer = 128;
//        Integer integer1 = 128;
//
//        if (integer==integer1){
//            System.out.println("相等");
//        }
//    }
}
